﻿using Cache.Contract;
/*----------------------------------------------------------------
// Copyright (C) 2012 Q.FunnyFace
// 版权所有。 
//
// 文件名：ManagerModule.cs
// 文件功能描述：模块信息业务逻辑
//
// 
// 创建标识：2012-10-26 zhangqiang
//
// 修改标识：
// 修改描述：
//
//
//----------------------------------------------------------------*/
using Common.Extensions.OrderBy;
using Common.Extensions.Where;
using DomainModel;
using IManager;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Manager
{

    /// <summary>
    /// 模块信息业务逻辑
    /// </summary>
    public class ManagerModule : IManagerModule
    {

        /// <summary>
        /// 模块信息数据访问接口
        /// </summary>
        public IDataAccess.IDataAccessModule IDAModule { get; set; }


        /// <summary>
        /// 缓存
        /// </summary>
        public ICache ICache { get; set; }



        /// <summary>
        /// 获取模块信息
        /// </summary>
        /// <returns>模块信息</returns>
        public IList<ModuleInfo> GetModules(string userType)
        {
            //const string moduleCache = "moduleCache1";
            IList<ModuleInfo> modules = null;//ICache.Get<IList<ModuleInfo>>(moduleCache);
            //if (modules == null)
            //{
                var p = PredicateExtension.True<ModuleInfo>();
                p = p.And(e => e.Enabled == 1 && e.UserTypes.Contains(userType));
                modules = IDAModule.Filter(p, new OrderByExpression<ModuleInfo, int>(a => a.SortNumber)).ToList(); 

            //    ICache.Add<IList<ModuleInfo>>(moduleCache, modules);
            //}
            return modules;
        }


        /// <summary>
        /// 获取父模块信息
        /// </summary>
        /// <returns>父模块信息</returns>
        public IList<ModuleInfo> GetParentsModules(string userType)
        {
            var modules = GetModules(userType);
            if (null == modules)
            {
                return null;
            }
            return modules
                    .Where(p => p.ModuleID.Length == 4)
                    .ToList();
        }


        /// <summary>
        /// 获取子模块信息
        /// </summary>
        /// <param name="moduleID">父亲模块Id</param>
        /// <returns>子模块信息</returns>
        public IList<ModuleInfo> GetSubsModules(string userType,string moduleID)
        {
            var modules = GetModules(userType);
            if (null == modules)
            {
                return null;
            }
            return modules
                    .Where(p => p.ModuleID.StartsWith(moduleID) && p.ModuleID.Length > 4)
                    .ToList();
        }


    }
}
